package com.example.entity.dto;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.example.entity.BaseData;
import lombok.Data;
import java.lang.reflect.Field;
import java.util.LinkedList;
import java.util.List;


@Data
@TableName("db_account_privacy")
public class AccountPrivacyDto implements BaseData {

    // 使用@TableId注解标识这个属性为数据库表的主键，IdType.AUTO表示主键值由数据库自动增长生成
    @TableId(type = IdType.AUTO)
    final Integer id; // 标记为final意味着这个字段在对象构造时必须被初始化

    // 下面几个属性表示用户隐私设置，是否展示对应的信息，默认都是true表示展示
    boolean phone = true; // 电话
    boolean email = true; // 邮箱
    boolean wx = true;    // 微信
    boolean qq = true;    // QQ
    boolean gender = true; // 性别

    // 返回哪些字段是需要忽略展示的，即用户选择不公开的信息
    public String[] hiddenFields(){
        List<String> strings = new LinkedList<>();
        // 获取当前类的所有声明字段
        Field[] fields = this.getClass().getDeclaredFields();
        for (Field field : fields) {
            try {
                // 如果字段类型是boolean，并且其值为false，则认为该字段代表的信息不应展示
                if(field.getType().equals(boolean.class) && !field.getBoolean(this))
                    strings.add(field.getName()); // 将不展示的字段名添加到列表中
            } catch (Exception ignored) {}
        }
        // 将列表转换为数组并返回
        return strings.toArray(String[]::new);
    }
}
